//-------------------------------------------------------------------
//	Copyright (c) 2010-2012 Zhirnov Andrey
//	This file is part of the "UXGEN" project.
//	See copyright notice in "Engine.h".
//-------------------------------------------------------------------

#ifndef _UX_RENDER_TECHNIQUE_H
#define _UX_RENDER_TECHNIQUE_H

#include "../Utils/CRenderQueue.h"

namespace Engine
{
namespace RenderUtils
{

	//
	// Render Technique
	//

	class _EXPORT_ IRenderTechnique : public CEngBaseObject
	{
	public:
		virtual void Resize(const uvec2 &vDim) = 0;

		virtual void SetupRenderQueue(IRenderQueue *) = 0;

		// Post Processes //
		virtual bool SetPostProcess(const IPostProcessBasePtr &pPP = nullptr) = 0;
		virtual bool AddPostProcess(const IPostProcessBasePtr &pPP, uint uIndex = 0) = 0;

		// Program //
		virtual bool GetProgram(e_program::type, e_render_layer::type, CBaseProgramShellPtr &) = 0;
		virtual void GetMaterialStateLock(e_render_layer::type, e_render_state_lock::type &) = 0;

		virtual void Render(IRenderQueue *, uint = 0) = 0;
		virtual bool IsReady() = 0;

		//virtual e_render_layer::type	GetCurrentRenderLayer() = 0;
		virtual e_technique::type		GetType() const = 0;
	};

//-------------------------------------------------------------------

}	// RenderUtils
}	// Engine

#endif	// _UX_RENDER_TECHNIQUE_H